Trip Report Test Senaryoları
Durum
Bu doküman, Form Builder'ın Trip Report özelinde test senaryolarını ve kabul kriterlerini detaylandırır.
Dynamic Schema Tests
Role-Based Schema Generation
describe("Dynamic Schema Generation", () => {
const testCases = [
{
role: "manager",
expectedFields: ["description", "amount", "approver"],
unexpectedFields: ["status"],
},
{
role: "employee",
expectedFields: ["description", "amount"],
unexpectedFields: ["approver"],
},
];
testCases.forEach(({ role, expectedFields, unexpectedFields }) => {
it(`generates correct fields for ${role}`, () => {
const context = { userRole: role };
const schema = generateTripReportSchema(context);
expectedFields.forEach((field) => {
expect(schema.fields).toContainField(field);
});
unexpectedFields.forEach((field) => {
expect(schema.fields).not.toContainField(field);
});
});
});
});
Company Settings Tests
describe("Company Settings Integration", () => {
it("applies strict validation when enabled", () => {
const context = {
companySettings: { strictMode: true },
};
const schema = generateTripReportSchema(context);
const validation = schema.fields.find(
(f) => f.name === "description"
).validation;
expect(validation.minLength).toBe(10);
});
});
Custom Component Tests
Component Registry
describe("Component Registry", () => {
it("registers and resolves custom components", () => {
const registry = useComponentRegistry();
registry.register("customExpense", CustomExpenseComponent);
const resolved = registry.resolve("customExpense");
expect(resolved).toBe(CustomExpenseComponent);
});
});
Custom Component Rendering
describe("Custom Component Integration", () => {
it("renders custom expense component", () => {
const { getByTestId } = render(
<FormBuilder schema={tripReportSchema} componentRegistry={mockRegistry} />
);
expect(getByTestId("custom-expense")).toBeInTheDocument();
});
});
Performance Tests
Schema Generation Performance
describe("Schema Generation Performance", () => {
it("generates schema within performance budget", () => {
const start = performance.now();
generateTripReportSchema(mockContext);
const duration = performance.now() - start;
expect(duration).toBeLessThan(50); // 50ms budget
});
});
Component Resolution Performance
describe("Component Resolution Performance", () => {
it("resolves components within performance budget", () => {
const registry = useComponentRegistry();
const start = performance.now();
registry.resolve("customExpense");
const duration = performance.now() - start;
expect(duration).toBeLessThan(5); // 5ms budget
});
});
Integration Tests
Full Form Flow
describe("Trip Report Form Flow", () => {
it("completes full submission flow", async () => {
const { getByLabelText, getByRole } = render(
<TripReportForm context={mockContext} />
);
// Fill form
await userEvent.type(
getByLabelText("description"),
"Business lunch with client"
);
await userEvent.type(getByLabelText("amount"), "150.00");
// Custom component interaction
await userEvent.click(getByTestId("custom-expense"));
await userEvent.selectOptions(getByLabelText("category"), "meal");
// Submit
await userEvent.click(getByRole("button", { name: /submit/i }));
// Assertions
expect(mockSubmit).toHaveBeenCalledWith({
description: "Business lunch with client",
amount: 150.0,
category: "meal",
});
});
});
Edge Cases
Context Changes
describe("Context Changes", () => {
it("updates form when role changes", async () => {
const { rerender, queryByLabelText } = render(
<TripReportForm context={{ userRole: "employee" }} />
);
expect(queryByLabelText("approver")).not.toBeInTheDocument();
rerender(<TripReportForm context={{ userRole: "manager" }} />);
expect(queryByLabelText("approver")).toBeInTheDocument();
});
});
Error Handling
describe("Error Handling", () => {
it("handles schema generation errors gracefully", () => {
const { getByText } = render(<TripReportForm context={invalidContext} />);
expect(getByText(/error generating form/i)).toBeInTheDocument();
});
});
Kabul Kriterleri
Teknik Kriterler
- Tüm test senaryoları başarılı
- Performance metrikleri karşılanıyor
- Edge case'ler kapsanmış
- Error handling testleri geçiyor
İş Kriterleri
- Farklı roller için doğru form görüntüleme
- Custom component'ler doğru çalışıyor
- Validasyonlar şirket ayarlarına uygun
- Form tamamlanma oranı hedefi karşılanıyor
Test Önceliklendirme
- Dynamic schema generation testleri
- Custom component integration testleri
- Performance testleri
- Edge case ve error handling testleri